/***
 *   user按键控制载板LED
 * LED--GPIO9 默认上拉至V3.3
 * user按键---GPIO5 按下接地
 * 实现功能：
 *      按下user键，LED亮，通过查询GPIO5端的点位控制GPIO9的输出
 * 2021.08.28  By Hellokun
 * 
 * */



#include <stdio.h>

#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"

#include "iot_gpio.h"
// #include "peripheral_hal.h"
#include "hi_io.h"

#define KEY_TASK_STACK_SIZE 512
#define KEY_TASK_PRIO 25
#define KEY_TEST_GPIO 5 // for hispark_pegasus 连接GPIO5 按下user键是 低电平-0
#define LED_GPIO_9 9    //LED 一端通过电阻R6上拉接到V3.3  故按下user键时灯就亮

static void *GpioTask(const char *arg)
{
    (void) arg;
   
    while(1)
    {
        IotGpioValue value = IOT_GPIO_VALUE1;      //==定义存贮电平的变量value 枚举类型有value0-value1
        IoTGpioGetInputVal(KEY_TEST_GPIO,&value);  //==获取GPIO user 按键引脚电平
        IoTGpioSetOutputVal(LED_GPIO_9,value);     //==设置GPIO9引脚的状态
       
    }
    return NULL;
}

static void GpioEntry(void)
{
    osThreadAttr_t attr;

    IoTGpioInit(KEY_TEST_GPIO);                    //==初始化GPIO5
   // HalIoSetFunc(HAL_WIFI_IOT_IO_NAME_GPIO_5, HI_IO_FUNC_GPIO_5_GPIO); //==设置为普通GPIO  必须执行，不然无法响应user按键
    hi_io_set_func(KEY_TEST_GPIO,HI_IO_FUNC_GPIO_5_GPIO);
    IoTGpioSetDir(KEY_TEST_GPIO,IOT_GPIO_DIR_IN);  //==设置user按键为输入 上拉输入
    hi_io_set_pull(HI_IO_NAME_GPIO_5, HI_IO_PULL_UP);

    IoTGpioInit(LED_GPIO_9);                       //==初始化GPIO9
    //HalIoSetFunc(LED_GPIO_9, HI_IO_FUNC_GPIO_9_GPIO); //==可设置，可不设置，目前不知道为啥
    IoTGpioSetDir(LED_GPIO_9,IOT_GPIO_DIR_OUT);    //==设置LED接口为输出

    attr.name = "GpioTask";                 //==指定线程运行的任务
    attr.attr_bits = 0U;                    //==
    attr.cb_mem = NULL;                     //==
    attr.cb_size = 0U;                      //==
    attr.stack_mem = NULL;                  //==
    attr.stack_size = KEY_TASK_STACK_SIZE;  //==
    attr.priority = KEY_TASK_PRIO;          //==优先权限 

    if(osThreadNew(GpioTask,NULL,&attr)==NULL)
    {
        printf("[GpioEntry] create GpioTask failed!\n");
    }
}

SYS_RUN(GpioEntry); //==ohos_init.h中定义的宏 让一个函数在系统启动时自动执行   


